为什么使用 Drill

使用 Drill 的 10 大原因。

1.上手快,使用方便

只需要几分钟就能使用 Drill。解压 Drill 软件在你的 Linux,Mac 或 Windows 笔记本电脑上运行本地的文件查询。无需设置任何基础设施或是定义 schemas。只需要指向数据,例如:数据在文件,目录,HBase 表和 Drill(PS:在 Drill 存在一个名为 employee.json 数据表)中。

  1. $ tar -xvf apache-drill-<version>.tar.gz
  2. $ <install directory>/bin/drill-embedded
  3. 0: jdbc:drill:zk=local> SELECT * FROM cp.`employee.json` LIMIT 5;
  4. +--------------+----------------------------+---------------------+---------------+--------------+----------------------------+-----------+----------------+-------------+------------------------+----------+----------------+----------------------+-----------------+---------+-----------------------+
  5. | employee_id | full_name | first_name | last_name | position_id | position_title | store_id | department_id | birth_date | hire_date | salary | supervisor_id | education_level | marital_status | gender | management_role |
  6. +--------------+----------------------------+---------------------+---------------+--------------+----------------------------+-----------+----------------+-------------+------------------------+----------+----------------+----------------------+-----------------+---------+-----------------------+
  7. | 1 | Sheri Nowmer | Sheri | Nowmer | 1 | President | 0 | 1 | 1961-08-26 | 1994-12-01 00:00:00.0 | 80000.0 | 0 | Graduate Degree | S | F | Senior Management |
  8. | 2 | Derrick Whelply | Derrick | Whelply | 2 | VP Country Manager | 0 | 1 | 1915-07-03 | 1994-12-01 00:00:00.0 | 40000.0 | 1 | Graduate Degree | M | M | Senior Management |
  9. | 4 | Michael Spence | Michael | Spence | 2 | VP Country Manager | 0 | 1 | 1969-06-20 | 1998-01-01 00:00:00.0 | 40000.0 | 1 | Graduate Degree | S | M | Senior Management |
  10. | 5 | Maya Gutierrez | Maya | Gutierrez | 2 | VP Country Manager | 0 | 1 | 1951-05-10 | 1998-01-01 00:00:00.0 | 35000.0 | 1 | Bachelors Degree | M | F | Senior Management |

2.无模式的 JSON 模型

Drill 是目前第一个也是唯一的分布式 SQL 引擎,她不需要 schemas。她和 MongoDB,ElasticSearch 一样,是无模式的的 JSON 模型。无需定义和维护数据的转换(ETL)。Drill 能够自动解析数据的结构。

3.查询复杂,半结构化数据

使用 Drill 无模式的 JSON 模型,你可以查询复杂的半结构化数据。不需要在查询执行期间或在查询执行期间将数据进行平坦化或转换。Drill 还提供了直观的扩展 SQL 用于嵌套数据。这里是一个简单的查询一个 JSON 文件,来演示如何访问嵌套元素和数组:

  1. SELECT * FROM (SELECT t.trans_id,
  2. t.trans_info.prod_id[0] AS prod_id,
  3. t.trans_info.purch_flag AS purchased
  4. FROM `clicks/clicks.json` t) sq
  5. WHERE sq.prod_id BETWEEN 700 AND 750 AND
  6. sq.purchased = 'true'
  7. ORDER BY sq.prod_id;

4.不一样的 SQL

Drill 支持标准的 SQL 语法:2003。不需要学习一个新的 “SQL” 语言或痛苦的去使用半功能化的 BI 工具。Drill 支持多种数据类型其中包括 DATE, INTERVAL, TIMESTAMP, 和 VARCHAR 以及复杂的查询,例如子查询和 JOIN 在 WHERE 语句中。下面是一个 TPC-H 标准查询运行于 Drill 中:

TPC-H query 4

  1. SELECT o.o_orderpriority, COUNT(*) AS order_count
  2. FROM orders o
  3. WHERE o.o_orderdate >= DATE '1996-10-01'
  4. AND o.o_orderdate < DATE '1996-10-01' + INTERVAL '3' month
  5. AND EXISTS(
  6. SELECT * FROM lineitem l
  7. WHERE l.l_orderkey = o.o_orderkey
  8. AND l.l_commitdate < l.l_receiptdate
  9. )
  10. GROUP BY o.o_orderpriority
  11. ORDER BY o.o_orderpriority;

5.支持标准的 BI 工具

Drill 能够工作在标准的 BI 工具中。你可以使用你现有的工具,例如 Tableau, MicroStrategy, QlikView 和 Excel。

6.与 Hive 表做交互式查询

Apache Drill 可以在你的 Hive 当中发挥更大的优势。你可以运行查询语句在 Drill 中访问你的 Hive 表和访问所有的 Hive 输入/输出格式(包含自定义的 SerDes)。你可以和不同的 Hive metastores 中表组合查询,也可以用 Hive 表和 HBase 表或目录的日志文件进行组合。下面是一个在 Drill 中,简单的 Hive 表查询:

  1. SELECT `month`, state, sum(order_total) AS sales
  2. FROM hive.orders
  3. GROUP BY `month`, state
  4. ORDER BY 3 DESC LIMIT 5;

7.访问多个数据源

Drill 可扩展,你可以连接多个文件系统(本地或分布式文件系统,例如 S3 和 HDFS),HBase 和 Hive。你也可以实现一个存储插件,以使 Drill 能够工作在其他的数据源上。另外,从单一的查询,非集中的元数据定义中,Drill 可以将数据从多个数据源中组合起来。下面是一个查询,将数据合并从一个 Hive 表,一个 HBase 表和一个 JSON 文件:

  1. SELECT custview.membership, sum(orders.order_total) AS sales
  2. FROM hive.orders, custview, dfs.`clicks/clicks.json` c
  3. WHERE orders.cust_id = custview.cust_id AND orders.cust_id = c.user_info.cust_id
  4. GROUP BY custview.membership
  5. ORDER BY 2;

8.用户自定义函数(UDFS)

Drill 对外提供了一个简单的,高性能的 JAVA API 来构建一个 UDFS 到你的业务逻辑中,Drill 也是支持 Hive 的 UDFS 的。如果你在 Hive 中已经构建了 UDFS,你可以直接重用它们,无需在修改。

9.高性能

Drill 设计初衷是高吞吐和低延时。她不使用通用的执行引擎,像 MapReduce,Tez 或 Spark。因而,Drill非常灵活(无模式的 JSON 模型)并且性能非常高。Drill 的优化利用模块化和低成本为技术基础,以及数据本地化和操作下推这种能力,能够将查询片段推到后端数据源。Drill 还提供了一个柱状矢量执行引擎,导致更高的内存和 CPU 效率。

10.单台笔记本电脑到 1000 个节点的集群

你可以简单的在一台笔记本电脑上运行 Drill。当你准备去分析大的数据集时,你需要将 Drill 部署到你的 Hadoop 集群(1000 个节点)。Drill 利用集群中的总内存来执行查询,使用一个可观的 pipelined 模型,在内存不足时,会自动 spills 到磁盘上。